// 1. var s1 = "get-element-by-id"; 给定这样一个连字符串，写一个function转换为驼峰命名法形式的字符串 getElementById
{
  function tranformCase(str) {
    let regexp = /-(\w)/g
    let newStr = str.replace(regexp, (_, value) => value.toUpperCase())
    return newStr
  }
  
  let s1 = "get-element-by-id"
  console.log('tranform before: ', s1);
  s1 = tranformCase(s1)
  console.log('tranform after: ', s1);
}

// 2. 判断字符串是否包含数字
{
  function isNumber(str) {
    let regexp = /\D/g
    return !regexp.test(str)
  }

  console.log(isNumber('abcd'));
  console.log(isNumber('abcd1'));
  console.log(isNumber('01234'));
}

// 3. 判断电话号码
{
  function isPhoneNumber(str) {
    let regexp = /^1[3-9]\d{9}$/
    return regexp.test(str)
  }
  console.log(isPhoneNumber('13800001111'));
  console.log(isPhoneNumber('1380000111'));
  console.log(isPhoneNumber('138000011111'));
}

// 4. 判断是否符合指定格式
// 给定字符串str，检查其是否符合如下格式
// XXX-XXX-XXXX
// 其中X为Number类型
{
  function matchesPattern(str) {
    let regexp = /^\d{3}-\d{3}-\d{4}$/
    return regexp.test(str)
  }

  console.log(matchesPattern('123-456-7890'));
  console.log(matchesPattern('123-456-78900'));
  console.log(matchesPattern('13-456-78900'));
}

// 5. 判断是否符合USD格式
// 给定字符串 str，检查其是否符合美元书写格式
// 以 $ 开始
// 整数部分，从个位起，满 3 个数字用 , 分隔
// 如果为小数，则小数部分长度为 2
// 正确的格式如：$1,023,032.03 或者 $2.03，错误的格式如：$3,432,12.12 或者 $34,344.3**
{
  function isUSD(str) {
    let regexp = /^\$\d{1,3}(,\d{3})*(\.\d{2})?$/
    return regexp.test(str)
  }
  
  console.log(isUSD('$1,023,032.03'));  // true
  console.log(isUSD('$2.03'));          // true
  console.log(isUSD('$3,432,12.12'));   // false
  console.log(isUSD('$34,344.3'));      // false
}

// 6. JS实现千位分隔符
{
  function format(number) {
    return number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',')
  }
  console.log(format(1));
  console.log(format(12));
  console.log(format(123));
  console.log(format(1234.23));
  console.log(format(12345));
  console.log(format(1234567));
  console.log(format(12345678));
  console.log(format(123456789));
}

// 7. 验证邮箱

{
  function isEmail(str) {
    // return /^[a-zA-Z0-9_\-]+(\.[a-zA-Z0-9_\-])*@([a-zA-Z0-9_\-]+\.)+[a-zA-Z]{2,6}$/.test(str)
    return /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(str);
  }
  console.log(isEmail('user.sd@example.com'))    // true
  console.log(isEmail('john.doe@co.uk'))      // true
  console.log(isEmail('invalid@email'))       // false
  console.log(isEmail('name@sub.domain.com')) // true
  console.log(isEmail('name@.com'))           // false
}